﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;

namespace BO
{
    public class UsuarioBO
    {
        #region Contrutores

        public UsuarioBO() 
        {
           
        }

        #endregion

        #region Leitores
        public static DropDownList Listar(DropDownList ddl)
        {
            try
            {
                var bco = new ModeloContainer();
                var objs = (from a in bco.Usuarios
                            orderby a.nomeCompleto ascending
                            select new
                            {
                                Código = a.id,
                                Descrição = a.nomeCompleto
                            }).ToList();
                ddl.DataSource = objs;
                ddl.DataTextField = "Descrição";
                ddl.DataValueField = "Código";
                ddl.DataBind();
                ddl.Items.Insert(0, "- -");
                return ddl;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message.ToString());
            }
        }
        public static List<Usuario> Listar(int vID, int vTipoID, string vNome, string vLogin)
        {
            try
            {
                ModeloContainer bco = new ModeloContainer();

                List<Usuario> objs = (from a in bco.Usuarios where a.id == a.id select a).ToList();

                if (vID != 0)
                {
                    objs = (from a in objs where a.id == vID select a).ToList();
                }

                if (vTipoID != 0)
                {
                    objs = (from a in objs where a.tipoUsuarioID == vTipoID select a).ToList();
                }

                if (!string.IsNullOrEmpty(vNome.Trim()))
                {
                    objs = (from a in objs where a.nomeCompleto.ToLower().Contains(vNome.ToLower()) select a).ToList();
                }

                if (!string.IsNullOrEmpty(vLogin.Trim()))
                {
                    objs = (from a in objs where a.login.ToLower().Contains(vLogin.ToLower()) select a).ToList();
                }


                return objs;
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public static Usuario Selecionar(int vID)
        {
            try
            {
                ModeloContainer bco = new ModeloContainer();

                Usuario obj = bco.Usuarios.FirstOrDefault(x => x.id == vID);
                if (obj == null)
                    throw new Exception("Usuário não localizado");
                else
                    return obj;
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public static Usuario fazLogin(string vlogin, string vsenha)
        {
            var bco = new ModeloContainer();

            Usuario usuario = (from b in bco.Usuarios where b.login == vlogin & b.senha == vsenha select b).FirstOrDefault();

            return usuario;
        }
        #endregion

        #region Modificadores

        public static Usuario Salvar(Usuario obj, int userID)
        {
            try
            {
                var bco = new ModeloContainer();

                if (obj.id == 0)
                {
                    bco.Usuarios.AddObject(obj);
                    bco.SaveChanges();
                }
                else
                {
                    Usuario objNovo = bco.Usuarios.FirstOrDefault(g => g.id == obj.id);

                    objNovo.tipoUsuarioID = obj.tipoUsuarioID;
                    objNovo.nomeCompleto = obj.nomeCompleto;
                    objNovo.login = obj.login;
                    objNovo.ativo = obj.ativo;

                    if(!string.IsNullOrEmpty(obj.nomeCompleto))
                        objNovo.senha = obj.senha;

                    bco.SaveChanges();
                }
                return obj;
            }

            catch (Exception)
            {
                throw;
            }
        }
        public static void Excluir(int id, int userID)
        {
            try
            {
                var bco = new ModeloContainer();

                Usuario obj = bco.Usuarios.FirstOrDefault(g => g.id == id);

                if (obj != null)
                {
                    bco.Usuarios.DeleteObject(obj);
                    bco.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.ToLower().Contains("constraint"))
                    throw new Exception("Impossivel realizar exclusão, pois há registros relacionados a este Usuario!");
                else
                    throw new Exception("Deletar - " + ex.Message.ToString());
            }
        }
        #endregion
    }
}
